package model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * Diese Klasse stellt eine Anfrage dar.
 * 
 * @author rainer.kubiak@stud.hdu-deggendorf.de Benoegtigte Lib:
 *         WebContent/WEB-INF/lib/ejb3-persistence.jar Letzte Aenderung:
 *         04.06.12 RK Klassenimplementierung
 */
@Entity
// Die Annotation @Entity dient dazu eine Klasse als persistent zu definieren.
@Table(name = "Anfrage")
// Falls die Tabelle in der Datenbank nicht denselben Namen hat wie die Klasse
// so kann der Tabellenname mit Hilfe der Annotation @Table definiert werden.
public class Anfrage {
	@Id
	// Annotation @Id, gibt an, welches Attribut der Klasse als Identität
	// (Primärschlüssel) fungieren soll
	@GeneratedValue
	// Die Identität eines Objektes kann mit dieser Annotation auch automatisch
	// generiert werden.
	@Column(name = "AID")
	// Die Annotation dient dazu, das Attribut in der Datenbank zu definieren;
	// (Bsp: name="familienname", length=30, nullable=false)
	/**
	 * Die ID der Anfrage.
	 */
	private int id;

	/**
	 * Die ID des Anbieters.
	 */
	@ManyToOne
	@JoinColumn(name = "PID", nullable = false)
	private Person anbieter;

	/**
	 * Die ID des Suchenden.
	 */

	@ManyToOne
	@JoinColumn(name = "SID", nullable = false)
	private Person suchender;

	/**
	 * Die Bewertung.
	 */
	@Column(name = "bewertung")
	private int bewertung;

	/**
	 * Der Kommentar.
	 */
	@Column(name = "kommentar")
	private String kommentar;

	@Column(name = "genehmigt")
	private boolean genehmigt;

	@Column(name = "gueltigVon")
	private Date gueltigVon;

	@Column(name = "gueltigBis")
	private Date gueltigBis;

	/**
	 * Einfacher Konstruktor der ein neues Anfrageobjekt erstellt. Die Felder
	 * des Objekts werden hierbei mit <code>0</code>/<code>null</code> gefüllt.
	 */
	public Anfrage() {
		this.setId(id);
		this.setAnbieter(anbieter);
		this.setSuchender(suchender);
		this.setBewertung(bewertung);
		this.setKommentar(kommentar);
		this.setGenehmigt(genehmigt);
		this.setGueltigVon(new Date());
		this.setGueltigBis(new Date());
	}

	/**
	 * Konstruktor der eine Anfrage anhand einer bereits bestehenden Anfrage
	 * erzeugt. Beachte dass zwar simple Datentypen neu abgelegt werden,
	 * Referenzen jedoch einfach übernommen werden (shallow copy).
	 * 
	 * @param anfrage
	 *            die Anfrage anhand derer die neue Anfrage erstellt wird
	 */
	public Anfrage(Anfrage anfrage) {
		this.setId(anfrage.getId());
		this.setAnbieter(anfrage.getAnbieter());
		this.setSuchender(anfrage.getSuchender());
		this.setBewertung(anfrage.getBewertung());
		this.setKommentar(anfrage.getKommentar());
		this.setGueltigVon(anfrage.getGueltigVon());
		this.setGueltigBis(anfrage.getGueltigBis());
	}

	/**
	 * Diese Methode gibt den {@link Person} Anbieter zurück.
	 * 
	 * @return die {@link Person} die den Anbieter darstellt
	 */
	public Person getAnbieter() {
		return anbieter;
	}

	/**
	 * Diese Methode setzt den {@link Person} Anbieter auf den übergebenen Wert.
	 * 
	 * @param anbieter
	 *            die {@link Person} die den Anbieter darstellt
	 */
	public void setAnbieter(Person anbieter) {
		this.anbieter = anbieter;
	}

	/**
	 * Diese Methode gibt den Wert der ID dieser Anfrage zurück.
	 * 
	 * @return int der den Wert der ID dieser Anfrage darstellt
	 */
	public int getId() {
		return id;
	}

	/**
	 * Diese Methode setzt die id dieses Angebots auf den übergebenen Wert.
	 * 
	 * @param id
	 *            der neu zugewiesene Wert
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Diese Methode gibt den {@link Person} Suchenden zurück.
	 * 
	 * @return die {@link Person} die den Suchenden darstellt
	 */
	public Person getSuchender() {
		return suchender;
	}

	/**
	 * Diese Methode setzt den {@link Person} Suchenden auf den übergebenen
	 * Wert.
	 * 
	 * @param suchender
	 *            die {@link Person} die den Suchenden darstellt
	 */

	public void setSuchender(Person suchender) {
		this.suchender = suchender;
	}

	/**
	 * Diese Methode gibt die {@link int} Bewertung zurück.
	 * 
	 * @return die {@link int} die die Bewertung darstellt
	 */
	public int getBewertung() {
		return bewertung;
	}

	/**
	 * Diese Methode setzt die {@link int} Bewertung auf den übergebenen Wert.
	 * 
	 * @param bewertung
	 *            die {@link int} die die Bewertung darstellt
	 */
	public void setBewertung(int bewertung) {
		this.bewertung = bewertung;
	}

	/**
	 * Diese Methode gibt den {@link String} Kommentar zurück.
	 * 
	 * @return die {@link String} die den Kommentar darstellt
	 */

	public String getKommentar() {
		return kommentar;
	}

	/**
	 * Diese Methode setzt den {@link String} Kommentar auf den übergebenen
	 * Wert.
	 * 
	 * @param kommentar
	 *            die {@link String} die den Kommentar darstellt
	 */

	public void setKommentar(String kommentar) {
		this.kommentar = kommentar;
	}

	public boolean getGenehmigt() {
		return genehmigt;
	}

	public void setGenehmigt(boolean genehmigt) {
		this.genehmigt = genehmigt;
	}

	public Date getGueltigVon() {
		return gueltigVon;
	}

	public void setGueltigVon(Date gueltigVon) {
		this.gueltigVon = gueltigVon;
	}

	public Date getGueltigBis() {
		return gueltigBis;
	}

	public void setGueltigBis(Date gueltigBis) {
		this.gueltigBis = gueltigBis;
	}

	public String toString() {
		return "";
	}

}
